#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QJsonObject>
#include <QJsonArray>
#include <QStandardItemModel>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QPixmap>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->listWidget->addItems(QStringList()<<"音乐播放器"<<"小游戏"<<"天气预报");
    // 设置模型
    pmodel = new QStandardItemModel (2, 1, ui->tableView);
    QStringList list = QStringList()<<"今日天气";
    pmodel->setHorizontalHeaderLabels(list);
    ui->tableView->setModel(pmodel);

    // 设置行高
    ui->tableView->setRowHeight(1, 135);

    // 设置列宽
    ui->tableView->setColumnWidth(0, 150); // 假设列索引为0

    // 强制视图更新
    ui->tableView->update(); // 或者 ui->tableView->repaint();
    QHeaderView *header = ui->tableView->verticalHeader();
     header->setHidden(true);// 隐藏行号




     manager = new QNetworkAccessManager(this);
     connect(manager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinishedmain);

    manager->get(QNetworkRequest(QUrl("http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101250101")));
    pgame = new game(ui->widget);
    ptianqi = new tianqi(ui->widget);
    pmusic = new music(ui->widget);
    pgame->hide();
    ptianqi->hide();


}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    pgame->hide();
    ptianqi->hide();

    if(item->text() == "小游戏")
        {
        pmusic->hide();
        pgame->show();
        pgame->setFocus();
        }
    if(item->text() == "音乐播放器")
        {

           pmusic->show();
        }
    if(item->text() == "天气预报")
        {
            pmusic->hide();
            ptianqi->show();
        }
}

void MainWindow::replyFinishedmain(QNetworkReply* reply)
{
    qDebug()<<"--------\"hello\"--------"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)<<endl;
   //    QNetworkRequest::HttpStatusCodeAttribute网址返回的状态码
       if(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200)
       {
           qDebug()<<"访问服务器成功"<<endl;
           parseJsonmain(reply->readAll());
       }
}

void MainWindow::parseJsonmain(QByteArray byteArray)
{
    QString typetext;
       QJsonDocument doc = QJsonDocument::fromJson(byteArray);
       if (doc.isObject()) {
           QString text;
           QJsonObject obj1 = doc.object();
           if (obj1.contains("realtime") == false) {
               qDebug() << "错误的json对象" << endl;
               return;
           }
           QJsonValue var = obj1.value("realtime");

           if (var.isObject() == false) {
               qDebug() << "realtime的值不是一个对象" << endl;
               return;
           }
           QJsonObject realtimeobj = var.toObject();
           typetext = realtimeobj.value("weather").toString();

           qDebug() << "天气" << typetext;
           pmodel->setItem(0, 0, new QStandardItem(typetext)); // 设置第二行的天气文本

//            如果天气为晴，则显示晴天的图标
           if (typetext == "晴")
           {
               QModelIndex index = pmodel->index(0, 1); // 获取第一行第一列的模型索引

               QImage image(":/image/天气晴.png"); // 加载图片
               QPixmap pixmap = QPixmap::fromImage(image); // 将图片转换为QPixmap

               // 创建一个QStandardItem，并设置图片
               QStandardItem *item = new QStandardItem;
               item->setData(pixmap, Qt::DecorationRole); // 设置装饰角色为图片
               item->setSizeHint(QSize(image.width(), image.height())); // 设置项的大小提示

               // 将项添加到模型中
               pmodel->setItem(1, item); // 将项添加到模型的第一行第一列
           }
           if (typetext == "多云")
           {
               QModelIndex index = pmodel->index(0, 1); // 获取第一行第一列的模型索引

               QImage image(":/image/天气多云.png"); // 加载图片
               QPixmap pixmap = QPixmap::fromImage(image); // 将图片转换为QPixmap

               // 创建一个QStandardItem，并设置图片
               QStandardItem *item = new QStandardItem;
               item->setData(pixmap, Qt::DecorationRole); // 设置装饰角色为图片
               item->setSizeHint(QSize(image.width(), image.height())); // 设置项的大小提示

               // 将项添加到模型中
               pmodel->setItem(1, item); // 将项添加到模型的第一行第一列
           }
       }
}


void MainWindow::on_pushButton_clicked()
{

}
